package Funcionalidades.ABMCompetencia;

import Funcionalidades.Menues.FrameUsuarioAutenticado;
import Funcionalidades.Menues.iDialogGeneral;
import Gestores.GestorCompetencia;
import ActionListeners.*;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.border.EmptyBorder;
import java.awt.Component;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JPanel;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JSpinner;
import javax.swing.SwingConstants;
import javax.swing.SpinnerNumberModel;
import javax.swing.DefaultComboBoxModel;


public class iModalidad extends iDialogGeneral {

	private final JPanel contentPanel = new JPanel();

	private static final long serialVersionUID = 1L;
	private JTextField txtPPG;
	private JTextField txtPPE;
	private JTextField txtPPPresentarse;
	private JTextField txtFaltaRival;
	private JComboBox<String> cbEmpate;
	private JComboBox<String> cbFormaPuntuacion;
	private JSpinner spinner;
	private JComboBox<String> cbTipoModalidad;

	
	
	private boolean verifico;

	private int ppg;
	private int ppe;
	private int ppp;
	public boolean isEmpate() {
		return empate;
	}

	public void setEmpate(boolean empate) {
		this.empate = empate;
	}

	private boolean empate;
	private String forma;
	private int sets;
	private int rival;
	private String tipoModalidad;

	private Vector<String> tipoModalidades;
	private GestorCompetencia gCompetencia;
	private Vector<String> formaPuntuacion;
	
	
	public iModalidad(FrameUsuarioAutenticado pantallaPrincipal) {
		super(pantallaPrincipal,true);
		
		label= new Dimension(150, 30);
		
		
		Dimension tam= new Dimension(400, 450);
		setTamanio(tam);
		setObligatorios(new Vector<Object>());
		
		gCompetencia= gCompetencia.getGestorCompetencia();

		setVerifico(false);
		try {
			formaPuntuacion=gCompetencia.obtenerFormaPuntuacion();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		
		
		try {
			tipoModalidades= gCompetencia.TiposModalidades();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		getContentPane().setLayout(new BorderLayout());
		
		JPanel panelTitulo = new JPanel();
		getContentPane().add(panelTitulo, BorderLayout.NORTH);
				
		JLabel lblTitulo = new JLabel("Modalidad de la Competencia");
		lblTitulo.setFont(new Font("Vani", Font.PLAIN, 20));
		panelTitulo.add(lblTitulo);

		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
		
		JPanel panelTipoModalidad = new JPanel();
		contentPanel.add(panelTipoModalidad);
		panelTipoModalidad.setMinimumSize(panel);
		
		JLabel lblTipoDeModalidad = new JLabel("Tipo de Modalidad:");
		panelTipoModalidad.add(lblTipoDeModalidad);
		lblTipoDeModalidad.setPreferredSize(label);
		
		
		cbTipoModalidad = new JComboBox<String>(tipoModalidades);
		cbTipoModalidad.addKeyListener(new MascaraMayusculakeyListener());
		panelTipoModalidad.add(cbTipoModalidad);
		cbTipoModalidad.setPreferredSize(datos);
		cbTipoModalidad.addActionListener(new ActionListener() {
		
			public void actionPerformed(ActionEvent arg0) {
					@SuppressWarnings("unchecked")
						JComboBox<String> evento=(JComboBox<String>) arg0.getSource();
						
						if(!evento.getSelectedItem().equals("LIGA")){
							cbEmpate.setEnabled(false);
							cbEmpate.setSelectedIndex(1);
							txtPPE.setEnabled(false);
							txtPPPresentarse.setEnabled(false);
							txtPPE.setText("0");
							txtPPPresentarse.setText("0");
						}
						else  {
							cbEmpate.setEnabled(true);
							if(!(cbEmpate.getSelectedItem().equals("No")))
								txtPPE.setEnabled(true);
							txtPPPresentarse.setEnabled(true);
							
						}
					}
				});
			
		
		
		JPanel panelFormaPuntuacion = new JPanel();
		contentPanel.add(panelFormaPuntuacion);
		panelFormaPuntuacion.setMaximumSize(panel);
		
		JLabel lblFormaDePuntuacin = new JLabel("Forma de Puntuaci\u00F3n:");
		lblFormaDePuntuacin.setHorizontalTextPosition(SwingConstants.LEFT);
		lblFormaDePuntuacin.setHorizontalAlignment(SwingConstants.LEFT);
		panelFormaPuntuacion.add(lblFormaDePuntuacin);
		lblFormaDePuntuacin.setPreferredSize(label);
		
		cbFormaPuntuacion = new JComboBox<String>(formaPuntuacion);
		panelFormaPuntuacion.add(cbFormaPuntuacion);
		cbFormaPuntuacion.setPreferredSize(datos);
		cbFormaPuntuacion.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
						@SuppressWarnings("unchecked")
						JComboBox<String> evento=(JComboBox<String>) arg0.getSource();
						if(!evento.getSelectedItem().equals("SET")) spinner.setEnabled(false);
						else  spinner.setEnabled(true);
						
						
					}
				});

		JPanel panelCantidadSets = new JPanel();
		contentPanel.add(panelCantidadSets);
		panelCantidadSets.setMaximumSize(panel);
		
		JLabel lblCantidadsets = new JLabel("Cantidad de Sets");
		lblCantidadsets.setHorizontalTextPosition(SwingConstants.LEFT);
		lblCantidadsets.setHorizontalAlignment(SwingConstants.LEFT);
		panelCantidadSets.add(lblCantidadsets);
		lblCantidadsets.setPreferredSize(label);
		
		
		
		spinner = new JSpinner();
		spinner.setModel(new SpinnerNumberModel(1, 1, 9, 2));
		panelCantidadSets.add(spinner);
		spinner.setPreferredSize(datos);
		
		JPanel panelFaltaEquipoContrario = new JPanel();
		contentPanel.add(panelFaltaEquipoContrario);
		panelFaltaEquipoContrario.setMaximumSize(panel);
		
		//TODO tantos por ausencia rival!!
		JLabel lblTantosGanadosPor = new JLabel("Tantos por Ausencia Rival:");
		lblTantosGanadosPor.setHorizontalTextPosition(SwingConstants.LEFT);
		lblTantosGanadosPor.setHorizontalAlignment(SwingConstants.LEFT);
		panelFaltaEquipoContrario.add(lblTantosGanadosPor);
		lblTantosGanadosPor.setPreferredSize(label);
		
		
		txtFaltaRival = new JTextField();
		txtFaltaRival.addKeyListener(new MascaraTipoIntListener());
		panelFaltaEquipoContrario.add(txtFaltaRival);
		txtFaltaRival.setPreferredSize(datos);
		txtFaltaRival.addKeyListener(new MascaraTipoIntListener());
		
		
		JPanel buttonPane = new JPanel();
		buttonPane.setMaximumSize(panel);
		buttonPane.setLayout(new FlowLayout(FlowLayout.CENTER));
		getContentPane().add(buttonPane, BorderLayout.SOUTH);
		
		JButton okButton = new JButton("Aceptar");
		okButton.setActionCommand("OK");
		buttonPane.add(okButton);
		okButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(camposObligatorios(getObligatorios())){
					if(Integer.parseInt(txtPPG.getText())>Integer.parseInt(txtPPE.getText())){
						setVerifico(true);
						actualizarValores();
						getParent().setFocusable(true);
						dispose();}
					else gError.mostrarErrorCampos("Los puntos por empate deben ser menores los puntos por gandado");
				}
				else gError.mostrarErrorCampos("Campos Obligatorios Faltantes");
				}
			});

		Component horizontalStrut = Box.createHorizontalStrut(20);
		buttonPane.add(horizontalStrut);

		JButton cancelButton = new JButton("Cancelar");
		cancelButton.setActionCommand("Cancel");
		buttonPane.add(cancelButton);
		cancelButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) { 
					getParent().setFocusable(true);
					dispose();
				}});
			
			
		JPanel panelppg = new JPanel();
		contentPanel.add(panelppg);
		panelppg.setMaximumSize(panel);
		
		JLabel lblPuntosPorPartidos = new JLabel("Puntos Por Partidos Ganado:");
		lblPuntosPorPartidos.setHorizontalTextPosition(SwingConstants.LEFT);
		lblPuntosPorPartidos.setHorizontalAlignment(SwingConstants.LEFT);
		panelppg.add(lblPuntosPorPartidos);
		lblPuntosPorPartidos.setPreferredSize(label);
		
		
		txtPPG = new JTextField();
		panelppg.add(txtPPG);
		txtPPG.addKeyListener(new MascaraTipoIntListener());
		txtPPG.setPreferredSize(datos);
		txtPPG.addKeyListener(new MascaraTipoIntListener());
		
		JPanel panelEmpate = new JPanel();
		contentPanel.add(panelEmpate);
		panelEmpate.setMaximumSize(panel);
		
		JLabel lblEmpate = new JLabel("\u00BFSe Permite Empate?");
		lblEmpate.setHorizontalTextPosition(SwingConstants.LEFT);
		lblEmpate.setHorizontalAlignment(SwingConstants.LEFT);
		panelEmpate.add(lblEmpate);
		lblEmpate.setPreferredSize(label);
		
		
		cbEmpate = new JComboBox<String>();
		cbEmpate.setModel(new DefaultComboBoxModel<String>(new String[] {"S\u00ED", "NO"}));
		cbEmpate.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
					@SuppressWarnings("unchecked")
					JComboBox<String> evento=(JComboBox<String>) arg0.getSource();
					if(evento.getSelectedItem().equals("No")){
						txtPPE.setEnabled(false);
						txtPPE.setText("0");
					}
					else 
						{ 
						txtPPE.setEnabled(true);
					}
					
				}
			});

		cbEmpate.addKeyListener(new MascaraMayusculakeyListener());
		panelEmpate.add(cbEmpate);
		cbEmpate.setPreferredSize(datos);
		
		
		JPanel panelppe = new JPanel();
		contentPanel.add(panelppe);
		panelppe.setMaximumSize(panel);
		
		JLabel lblPuntosPorEmpate = new JLabel("Puntos Por Empate:");
		lblPuntosPorEmpate.setHorizontalTextPosition(SwingConstants.LEFT);
		lblPuntosPorEmpate.setHorizontalAlignment(SwingConstants.LEFT);
		panelppe.add(lblPuntosPorEmpate);
		lblPuntosPorEmpate.setPreferredSize(label);
		
		
		txtPPE = new JTextField();
		txtPPE.addKeyListener(new MascaraTipoIntListener());
		panelppe.add(txtPPE);
		txtPPE.setPreferredSize(datos);
		
		
		
		JPanel panelpppresentarse = new JPanel();
		contentPanel.add(panelpppresentarse);
		panelpppresentarse.setMaximumSize(panel);
		
		JLabel lblPppresentarse = new JLabel("Puntos Por Presentarse:");
		lblPppresentarse.setHorizontalTextPosition(SwingConstants.LEFT);
		lblPppresentarse.setHorizontalAlignment(SwingConstants.LEFT);
		panelpppresentarse.add(lblPppresentarse);
		lblPppresentarse.setPreferredSize(label);
		
		
		txtPPPresentarse = new JTextField();
		panelpppresentarse.add(txtPPPresentarse);
		txtPPPresentarse.setPreferredSize(datos);
		txtPPPresentarse.addKeyListener(new MascaraTipoIntListener());
		
		
		
		getObligatorios().add(txtPPE);
		getObligatorios().add(txtPPPresentarse);
		getObligatorios().add(txtPPG);
		getObligatorios().add(txtFaltaRival);
		
	}
	
	public void actualizarValores(){
		setPpe(Integer.parseInt(txtPPE.getText()));
		setPpg(Integer.parseInt(txtPPG.getText()));
		setPpp(Integer.parseInt(txtPPPresentarse.getText()));
		setSets((int) spinner.getValue());
		setTipoModalidad(cbTipoModalidad.getSelectedItem().toString());
		setEmpate(cbEmpate.getSelectedItem().toString());
		setForma(cbFormaPuntuacion.getSelectedItem().toString());
		setRival(Integer.parseInt(txtFaltaRival.getText()));
	}

	public int getPpg() {
		return ppg;
	}


	public void setPpg(int ppg) {
		this.ppg = ppg;
	}


	public int getPpe() {
		return ppe;
	}


	public void setPpe(int ppe) {
		this.ppe = ppe;
	}


	public int getPpp() {
		return ppp;
	}


	public void setPpp(int ppp) {
		this.ppp = ppp;
	}


	public boolean Empate() {
		return empate;
	}


	public void setEmpate(String em) {
		
		this.empate = !(em.equals("No"));
	}


	public String getForma() {
		return forma;
	}


	public void setForma(String forma) {
		this.forma = forma;
	}


	public int getSets() {
		return sets;
	}


	public void setSets(int sets) {
		this.sets = sets;
	}


	public int getRival() {
		return rival;
	}


	public void setRival(int rival) {
		this.rival = rival;
	}

	public String getTipoModalidad() {
		return tipoModalidad;
	}

	public void setTipoModalidad(String tipoModalidad) {
		this.tipoModalidad = tipoModalidad;
	}

	public boolean isVerifico() {
		return verifico;
	}

	public void setVerifico(boolean verifico) {
		this.verifico = verifico;
	}



}
